//引用express框架
const express = require('express');
//引用route路由
const dropTask = express.Router();
//引用数据库操作逻辑
var mongoose = require('../model/db')
var Step = require('../model/step')
var Task = require('../model/task')
var Task_stepBind = require('../model/task_stepBind')
var TaskPush = require('../model/taskPush')

dropTask.get('/', (req, res) => {
    let id = req.query.id
    console.log(id)
    id = mongoose.Types.ObjectId(id)
    console.log(id)
    let respon = res
    let data = {
        status: 200,
        tips: 'success',
    }
    // 删除任务
    Task.deleteOne(
        { "_id": id },
        (err, doc) => {
            // 若失败则告知原因，并返回
            if (err) {
                data.tips = err
                respon.status(200).json(data)
            }
            // deletedCount
            else if(doc.deletedCount == 0){
                data.tips = '任务不存在'
                respon.status(200).json(data)
            }
            // 否则通过taskid查找对应的步骤stepid并删除
            else {
                // 通过关联表查询与该步骤所关联的所有步骤id
                Task_stepBind.find({ 'taskId': id }, function (err, doc) {
                    // 若失败则告知原因，并返回
                    if (err) {
                        data.tips = err
                        respon.status(200).json(data)
                    }
                    doc.forEach(step => {
                        // 依据查询结果逐条删除步骤
                        Step.deleteOne(
                            { "_id": step.stepId },
                            (err, doc) => {
                                // 若失败则告知原因，并返回
                                if (err) {
                                    data.tips = err
                                    respon.status(200).json(data)
                                }
                            })
                        // 依据查询结果逐条删除任务-步骤关联信息
                        Task_stepBind.deleteOne(
                            { "taskId": step.taskId },
                            (err, doc) => {
                                // 若失败则告知原因，并返回
                                if (err) {
                                    data.tips = err
                                    respon.status(200).json(data)
                                }
                            })
                    });
                })
                // 删除任务-作者关联
                TaskPush.deleteOne(
                    { "taskId": id },
                    (err, doc) => {
                        // 若失败则告知原因，并返回
                        if (err) {
                            data.tips = err
                            respon.status(200).json(data)
                        }
                        data.tips = 'success delete'
                        respon.status(200).json(data)
                    })
            }
        })
})

//将路由对象做为模块成员进行导出
module.exports = dropTask;